package com.catmiao.spark.acc

import org.apache.spark.util.LongAccumulator
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @title: Spark01_RDD_Dep
 * @projectName spark_study
 * @description: TODO
 * @author ChengMiao
 * @date 2024/2/28 23:20
 */
object Spark01_Acc_01 {


  def main(args: Array[String]): Unit = {
    val sparkCon = new SparkConf().setMaster("local[*]").setAppName("acc")

    val sparkContext = new SparkContext(sparkCon)

    val rdd = sparkContext.makeRDD(List(1, 2, 3, 4))

    // 获取系统累加器
    // Spark默认提供了简单数据聚合的累加器
    val sumAcc: LongAccumulator = sparkContext.longAccumulator("sumAcc")

    rdd.foreach(
      num => {
        // 使用累加器
        sumAcc.add(num)
      }
    )

    // 获取累加器的值
    // 少加：转换算子中调用累加器，如果没有行动算子的话，则不会执行
    println(sumAcc.value)

    sparkContext.stop()
  }
}
